//
//  SegmentDownloadTask.h
//  SegmentDownloadDemo
//
//  Created by gao on 2018/5/29.
//  Copyright © 2018年 gao. All rights reserved.
//

#import <Foundation/Foundation.h>
typedef NS_ENUM(NSInteger, DownloadTaskStatus) {
    /**
     *  初始状态
     */
    kDownloadTaskStatusNone              = 0,
    /**
     *  等待下载
     */
    kDownloadTaskStatusWaiting           = 1,
    /**
     *  开始下载
     */
    kDownloadTaskStatusStart       = 2,
    /**
     *  下载中
     */
    kDownloadTaskStatusDownloading       = 3,
    /**
     *  下载暂停
     */
    kDownloadTaskStatusSuspended = 4,
    /**
     *  下载完成
     */
    kDownloadTaskStatusFinished    = 5,
    /**
     *  下载失败
     */
    kDownloadTaskStatusFailed    = 11,
    
};

@interface SegmentDownloadTask_SubTask:NSObject

/**
 数据起始点
 */
@property(nonatomic,assign)NSInteger startBytesOffset;
/**
 数据结束点
 */
@property(nonatomic,assign)NSInteger endBytesOffset;
/**
 已经下载了的字节数
 */
@property(nonatomic,assign)NSInteger downloadBytes;

/**
 下载文件的临时文件名
 */
@property(nonatomic,copy)NSString *tmpName;
/**
 下载文件的临时路径
 */
@property(nonatomic,copy)NSString *tempPath;

@property(nonatomic,assign)NSInteger subTaskIndex;
@property(nonatomic,strong)NSURLSessionDownloadTask *downloadTask;
/**
 是否下载完成
 */
@property(nonatomic,assign)BOOL isFinished;

/**
 是否正在下载
 */
@property(nonatomic,assign)BOOL isDownloading;

@property(nonatomic,assign)NSInteger reDownloadCount;

@property(nonatomic,copy)NSString *message;
/**
 是否可以被下载
 */
@property(nonatomic,readonly)BOOL canDownload;

@property(nonatomic,strong)NSURL *downloadURL;

/**
 获取NSURLSessionDownloadTask

 @return downloadTask
 */
-(NSURLSessionDownloadTask *)getDownloadTask;

@end


@interface SegmentDownloadTask : NSObject
/**
 已经下载了的字节数
 */
@property(nonatomic,assign)NSInteger downloadBytes;
/**
 文件总大小
 */
@property(nonatomic,assign)NSInteger fileTotalBytes;

/**
 文件下载进度
 */
@property(nonatomic,assign)float progress;

/**
 下载地址
 */
@property(nonatomic,copy)NSURL *downloadURL;

/**
 下载状态
 */
@property(nonatomic,assign)DownloadTaskStatus status;
/**
 *  下载完之后 文件名
 */
@property (nonatomic, copy) NSString * destinationFileName;

/**
 *  唯一标示符
 */
@property (nonatomic, copy) NSString *uniqueIdentifier;

/**
 优先级
 */
@property(nonatomic,assign)NSInteger priority;

/**
 是否可以被下载 主要是看是否已经请求到下载文件的大小.
 */
@property(nonatomic,readonly)BOOL canDownload;


@property(nonatomic,copy)NSString *faildMessage;

@property(nonatomic,strong)NSMutableArray<SegmentDownloadTask_SubTask *>*subTaskArray;

-(instancetype)initWithURL:(NSURL*)URL;

-(instancetype)initWithURL:(NSURL*)URL fileTotalBytes:(NSInteger)fileTotalBytes;

-(void)initDownloadSubTask;

-(void)subTask:(SegmentDownloadTask_SubTask *)subTask updateDownloadBytes:(NSInteger)downloadBytes;
-(void)subTask:(SegmentDownloadTask_SubTask *)subTask downloadFinished:(NSData *)data;

/**
 检查下载任务是否下载完成

 @return BOOL
 */
-(BOOL)checkDownloadTaskIsFinished;
/**
 请求文件大小

 @return download file size
 */
#pragma mark --
-(void)getFileTotalLength;

@end
